﻿Imports System.Text.RegularExpressions
Public Class FrmABMCliente
    Dim acceso As New acceso_a_datos
    Dim combo As New combo
    Dim grillaActiva As Boolean = False


    Private Sub FrmABMCliente_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        combo.cargar(Me.cmbTipoDNI, "TipoDNI")
        combo.cargar(Me.cmbEstadoSocio, "EstadoSocio")
    End Sub

    Private Sub btnBuscar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBuscar.Click
        Dim formBuscarCliente As New FrmBuscarClientes(Me)
        formBuscarCliente.Show()
    End Sub

    Private Sub btnNuevo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNuevo.Click
        accion = estado.nuevo
        deshabilitarGrilla()
        borrarContenidoEnGrilla()
    End Sub

    Private Function validarCampos() As Boolean
        Dim valido As Boolean = True
        Dim camposVacios(GroupBoxDatos.Controls.Count) As Control
        For p = 0 To camposVacios.Length - 1
            camposVacios(p) = Nothing
        Next

        For Each campo As Control In GroupBoxDatos.Controls
            If Not campo.GetType.Name = "Panel" And campo.Text = "" And Not campo.Tag = "Piso" And Not campo.Tag = "Dpto" Then
                camposVacios(campo.TabIndex) = campo
                valido = False
            End If
        Next

        Dim campoFoco As Control = Nothing
        Dim mensajeCamposVacios As String = "Los campos "

        For i = 0 To camposVacios.Length - 1
            If Not camposVacios(i) Is Nothing Then
                mensajeCamposVacios += camposVacios(i).Tag & ", "
                If campoFoco Is Nothing Then
                    campoFoco = camposVacios(i)
                End If
            End If
        Next

        mensajeCamposVacios += "están vacíos."

        If Not valido Then
            MsgBox(mensajeCamposVacios, MsgBoxStyle.Exclamation, "Campos no Válidos")
        End If

        If Not campoFoco Is Nothing Then
            campoFoco.Focus()
        End If

        Return valido
    End Function

    Private Sub btnGuardar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGuardar.Click
        If validarCampos() Then
            acceso._tabla = "Cliente"
            Dim consultaInsert As String
            'consultaInsert = "nombre='" & txtNombreArticulo.Text & "', sinopsis='" & txtSinopsis.Text & "', idTipoArticulo=" & cmbTipoArticulo.SelectedValue & ", idCalificacion=" & cmbClasificacion.SelectedValue & ", idGenero=" & cmbGenero.SelectedValue
            consultaInsert = "INSERT INTO " & acceso._tabla & "(NroDNI, idTipoDNI, Calle, Nro,Piso,Departamento,Telefono,Email,idEstadoSocio,apellidos,nombres) VALUES('" & mtxtNroDoc.Text & "' ,'" & cmbTipoDNI.SelectedValue & "' ,'" & txtCalle.Text & "' ,'" & txtNro.Text & "' ,'" & txtPiso.Text & "' ,'" & txtDpto.Text & "' ,'" & mtxtTelefono.Text & "' ,'" & txtEmail.Text & "' ,'" & cmbEstadoSocio.SelectedValue & "' ,'" & txtApellidos.Text & "' ,'" & txtNombres.Text & "')"
            Dim consultaModificar As String

            If accion = estado.nuevo Then
                acceso._consulta(consultaInsert)
                MsgBox("Se agregó el Cliente " & txtApellidos.Text & ", " & txtNombres.Text & " con éxito")
            Else
                consultaModificar = "UPDATE " & acceso._tabla & " SET idTipoDNI= '" & cmbTipoDNI.SelectedValue & "', NroDNI='" & mtxtNroDoc.Text & "', Calle='" & txtCalle.Text & "', Nro='" & txtNro.Text & "', Piso='" & txtPiso.Text & "', Departamento='" & txtDpto.Text & "', Telefono='" & mtxtTelefono.Text & "', Email='" & txtEmail.Text & "', idEstadoSocio='" & cmbEstadoSocio.SelectedValue & "', apellidos='" & txtApellidos.Text & "', nombres='" & txtNombres.Text & "' WHERE NroDNI ='" & DataGridViewDatos.CurrentRow.Cells("Número de Documento").Value & "' AND idTipoDNI = '" & cmbTipoDNI.SelectedValue & "'"
                acceso._modificar(consultaModificar)
                MsgBox("Se modificaron los datos del Cliente " & txtApellidos.Text & ", " & txtNombres.Text & " con éxito")
                deshabilitarGrilla()
                borrarContenidoEnGrilla()
            End If
            limpiarCampos()
            habilitarDeshabilitarBotonesAcciones()
            habilitarDeshabilitarCampos()
        End If
    End Sub
    Private Sub deshabilitarGrilla()
        grillaActiva = False
        DataGridViewDatos.Enabled = False
        btnEliminar.Enabled = False
        btnModificar.Enabled = False
    End Sub
    Private Sub borrarContenidoEnGrilla()
        DataGridViewDatos.DataSource = Nothing
    End Sub

    Private Sub btnModificar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnModificar.Click
        accion = estado.modificar
        deshabilitarGrilla()
    End Sub

    Private Sub btnCancelar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancelar.Click
        If accion = estado.modificar Then
            btnEliminar.Enabled = True
            btnModificar.Enabled = True
            accion = estado.nuevo
        End If
    End Sub
    Private Sub cargarDatos()
        If grillaActiva And Not DataGridViewDatos.CurrentRow Is Nothing Then
            cmbTipoDNI.SelectedIndex = cmbTipoDNI.FindString(DataGridViewDatos.CurrentRow.Cells("Tipo de Documento").Value)
            mtxtNroDoc.Text = DataGridViewDatos.CurrentRow.Cells("Número de Documento").Value
            txtApellidos.Text = DataGridViewDatos.CurrentRow.Cells("Apellidos").Value
            txtNombres.Text = DataGridViewDatos.CurrentRow.Cells("Nombres").Value
            txtCalle.Text = DataGridViewDatos.CurrentRow.Cells("Calle").Value
            txtNro.Text = DataGridViewDatos.CurrentRow.Cells("Número").Value
            txtPiso.Text = DataGridViewDatos.CurrentRow.Cells("Piso").Value
            txtDpto.Text = DataGridViewDatos.CurrentRow.Cells("Dpto").Value
            mtxtTelefono.Text = DataGridViewDatos.CurrentRow.Cells("Teléfono").Value
            txtEmail.Text = DataGridViewDatos.CurrentRow.Cells("Email").Value
            cmbEstadoSocio.SelectedIndex = cmbEstadoSocio.FindString(DataGridViewDatos.CurrentRow.Cells("Estado de Socio").Value)
        End If
    End Sub

    Private Sub DataGridViewDatos_SelectionChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DataGridViewDatos.SelectionChanged
        cargarDatos()
    End Sub
    Friend Sub resultadoBusqueda(ByRef _tabla As Data.DataTable)
        Me.DataGridViewDatos.DataSource = _tabla
        Dim activo As Boolean = False
        If Me.DataGridViewDatos.Rows.Count > 0 Then
            Me.DataGridViewDatos.CurrentCell = DataGridViewDatos(1, 0)
            activo = True
        End If
        Me.DataGridViewDatos.Enabled = activo
        btnModificar.Enabled = activo
        btnEliminar.Enabled = activo
        grillaActiva = True
        For i = 4 To 10
            DataGridViewDatos.Columns(i).Visible = False
        Next
        If activo Then
            cargarDatos()
        Else
            limpiarCampos()
        End If
        Me.DataGridViewDatos.Focus()
    End Sub

    Private Sub btnEliminar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEliminar.Click
        Dim cliente As String = Me.DataGridViewDatos.CurrentRow.Cells("Apellidos").Value & " " & Me.DataGridViewDatos.CurrentRow.Cells("Nombres").Value
        acceso._tabla = "Cliente"
        Dim consultaVentasCliente = "SELECT * FROM Venta WHERE tipoDocCliente = " & cmbTipoDNI.SelectedValue & " AND nroDocCliente = " & mtxtNroDoc.Text
        Dim consultaAlquileresCliente = "SELECT * FROM Alquiler WHERE idTipoDNI = " & cmbTipoDNI.SelectedValue & " AND NroDNI = " & mtxtNroDoc.Text
        If acceso._consulta(consultaVentasCliente).Rows.Count > 0 Then
            MsgBox("No se puede borrar el Cliente " & txtApellidos.Text & " " & txtNombres.Text & " ya que tiene compras asociadas", MsgBoxStyle.Information, "Imposible Borrar")
            Exit Sub
        ElseIf acceso._consulta(consultaAlquileresCliente).Rows.Count > 0 Then
            MsgBox("No se puede borrar el Cliente " & txtApellidos.Text & " " & txtNombres.Text & " ya que tiene alquileres asociados", MsgBoxStyle.Information, "Imposible Borrar")
            Exit Sub
        End If
        If MsgBox("Está seguro que desea borrar el Cliente " & cliente & " ?", MsgBoxStyle.Question + MsgBoxStyle.YesNo, "Importante") = MsgBoxResult.Yes Then
            Me.acceso._borrar("Delete From Cliente where idTipoDNI = " & cmbTipoDNI.SelectedValue & "AND NroDNI = " & mtxtNroDoc.Text)
            MsgBox("Se borró el Cliente " & cliente & " con éxito")
            accion = estado.eliminar
            limpiarCampos()
            deshabilitarGrilla()
            borrarContenidoEnGrilla()
        End If
    End Sub
    Public Function validar_Mail(ByVal sMail As String) As Boolean
        ' retorna true o false   
        Return Regex.IsMatch(sMail, "^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$")
    End Function

    Private Sub txtEmail_Leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtEmail.Leave
        If validar_Mail(LCase(txtEmail.Text)) = False Then
            MessageBox.Show("Dirección de correo electronico no valida, el correo debe tener el formato: nombre@dominio.com, " & _
            " por favor seleccione un correo valido", "Validación de correo electronico", MessageBoxButtons.OK,
            MessageBoxIcon.Exclamation)
            txtEmail.Focus()
            txtEmail.SelectAll()
        End If

    End Sub
End Class
